• 该章节中所用到的表

# models.py

from django.db import models


class Book(models.Model):
    title = models.CharField(max_length=15, verbose_name='书名')
    price = models.IntegerField(verbose_name='价格')
    publish = models.ForeignKey(to='Publish', verbose_name='出版社')
    author = models.ManyToManyField(to='Author', verbose_name='作者')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "书籍"
        verbose_name_plural = verbose_name


class Publish(models.Model):
    title = models.CharField(max_length=15)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = '出版社'
        verbose_name_plural = verbose_name


class Author(models.Model):
    name = models.CharField(max_length=15)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '作者'
        verbose_name_plural = verbose_name

  • ._meta.app_label -> 获取该表类所在app的app名称

app_label = Book._meta.app_label

print(app_label)  # app01

  • ._meta.model_name -> 获取该表类所对应的表名(字符串类型)

model_name = Book._meta.model_name

print(model_name)  # book

  • ._meta.get_field('字段名') -> 获取该类内指定字段对象(即: 该字段类所实例化出来的对象)

field_obj = Book._meta.get_field('title')

print(type(field_obj))  # <class 'django.db.models.fields.CharField'>

    • 使用实例

# 获取 title 字段中 verbose_name 属性的值

# 注意: 如果没有设置 verbose_name,那么默认返回该字段属性名

verbose_name = Book._meta.get_field('title').verbose_name

print(verbose_name)  # 书名 (如果没有设置 verbose_name 就会返回 title)

# 获取 title 字段中 max_length 属性的值

max_length = Book._meta.get_field('title').max_length

print(max_length)  # 15

  • ._meta.fields -> 获取该表类内所有字段对象(即: 该表类中所有字段类所实例化出来的对象)

fields = Book._meta.fields

print(fields)  # (<django.db.models.fields.AutoField: id>, <django.db.models.fields.CharField: title>, <django.db.models.fields.IntegerField: price>, <django.db.models.fields.related.ForeignKey: publish>)

    • 使用实例

# 获取下标为1的字段对象中 verbose_name 属性的值

# 注意: 如果没有设置 verbose_name,那么默认返回该字段属性名

fields_list = Book._meta.fields
verbose_name = fields_list[1].verbose_name

# 等同于

verbose_name = Book._meta.fields[1].verbose_name

print(verbose_name)  # 书名 (如果没有设置 verbose_name 就会返回 title)

# 获取下标为1的字段对象中 max_length 属性的值

fields_list = Book._meta.fields
max_length = fields_list[1].max_length

# 等同于

max_length = Book._meta.fields[1].max_length

print(max_length)  # 15

  • ._meta.get_fields() -> 获取该表类内所有字段对象(即: 该表类中所有字段类所实例化出来的对象),包含反向关联字段

fields = Book._meta.get_fields()

print(fields)  # (<django.db.models.fields.AutoField: id>, <django.db.models.fields.CharField: title>, <django.db.models.fields.IntegerField: price>, <django.db.models.fields.related.ForeignKey: publish>, <django.db.models.fields.related.ManyToManyField: author>)

    • 使用实例

# 获取多对多字段对象中 verbose_name 属性的值

# 注意: 如果没有设置 verbose_name,那么默认返回该字段属性名

fields = Book._meta.get_fields()
verbose_name = fields[4].verbose_name

# 等同于

verbose_name = Book._meta.get_fields()[4].verbose_name

print(verbose_name)  # 书名 (如果没有设置 verbose_name 就会返回 title)

# 获取下标为1的字段对象中 max_length 属性的值

fields = Book._meta.get_fields()
max_length = fields[1].max_length

# 等同于

max_length = Book._meta.get_fields()[1].max_length

print(max_length)  # 15

  • ._meta.many_to_many -> 获取该表类内所有多对多字段对象(即: 该表类中所有多对多字段类所实例化出来的对象)

many_to_many_list = Book._meta.many_to_many

print(many_to_many_list)  # (<django.db.models.fields.related.ManyToManyField: author>,)

    • 使用实例

# 获取下标为0的字段对象中 verbose_name 属性的值

# 注意: 如果没有设置 verbose_name,那么默认返回该字段属性名

many_to_many_list = Book._meta.many_to_many
verbose_name = many_to_many_list[0].verbose_name

# 等同于

verbose_name = Book._meta.many_to_many[0].verbose_name

print(verbose_name)  # 书名 (如果没有设置 verbose_name 就会返回 title)